package br.com.designless.business.component;

import br.com.designless.business.model.Jogos;
import br.com.designless.business.model.Usuarios;
import br.com.designless.util.Constantes;
import java.text.SimpleDateFormat;
import javax.activation.DataHandler;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.mail.Session;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.NamingException;

/**
 *
 * @author Administrador
 */
@Stateless(name=EmailComponentLocal.JNDI_NAME)
public class EmailComponentBean implements EmailComponentLocal {
    
    @Resource(name = "mail/FutibaManager")
    private Session emailSession;

    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

    private static final String HTML_MIME_TYPE = "text/html";

    public void enviarEmailCadastroUsuario(Usuarios usuario) {
        if (usuario == null) {
            return;
        }
        
        String assunto = "Cadastro FutibaManager";

        String mensagem = "Seu cadastro no site FutibaManager foi efetuado com sucesso.";

        mensagem += "<br/><br/>Nome de Usuário: " + usuario.getLogin();
        mensagem += "<br/>Senha: " + usuario.getSenha();

        mensagem += "<br/><br/><b>Equipe FutibaManager</b>";

        try {
            enviarEmail(usuario.getEmail(), assunto, mensagem);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void enviarEmailConfirmacaoParticipacaoJogo(Usuarios usuario, Jogos jogo) {
        if (usuario == null) {
            return;
        }

        simpleDateFormat.applyPattern(Constantes.PADRAO_DATA);

        String dataJogo = simpleDateFormat.format(jogo.getData());

        simpleDateFormat.applyPattern(Constantes.PADRAO_HORA);

        String horaJogo = simpleDateFormat.format(jogo.getData());

        String assunto = "Aviso FutibaManager";

        String mensagem = "Sua participação para o jogo que será realizado no dia <b>" + dataJogo + "</b>";

        mensagem += " às <b>" + horaJogo + "</b>";
        mensagem += " no(a) <b>" + jogo.getLocal().getDescricao() + "</b>";
        mensagem += " foi confirmada com sucesso.";
        mensagem += "<br/><br/> Contamos com sua presença!";

        mensagem += "<br/><br/><b>Equipe FutibaManager</b>";

        try {
            enviarEmail(usuario.getEmail(), assunto, mensagem);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void enviarEmailConviteParticipacaoJogo(String[] emailsConvidados, Jogos jogo) {
        if (emailsConvidados == null || emailsConvidados.length == 0) {
            return;
        }

        simpleDateFormat.applyPattern(Constantes.PADRAO_DATA);

        String dataJogo = simpleDateFormat.format(jogo.getData());

        simpleDateFormat.applyPattern(Constantes.PADRAO_HORA);

        String horaJogo = simpleDateFormat.format(jogo.getData());

        String assunto = "Convite FutibaManager";

        String mensagem = "Você está recebendo um convite para participação no jogo que será realizado no dia <b>" + dataJogo + "</b>";

        mensagem += " às <b>" + horaJogo + "</b>";
        mensagem += " no(a) <b>" + jogo.getLocal().getDescricao() + "</b>.";

        mensagem += "<br/><br/> Para confirmar sua presença acesse nosso site pelo link abaixo:";
        mensagem += "<br/><br/><a href='http://192.168.1.59:8081/FutibaManager-war'>Futiba Manager</a>";

        mensagem += "<br/><br/><b>Equipe FutibaManager</b>";

        String emailsUsuarios = "";

        for (String emailConvidado : emailsConvidados) {
            emailsUsuarios += emailConvidado + ",";
        }

        emailsUsuarios = emailsUsuarios.substring(0, emailsUsuarios.length() - 1);

        System.out.println("EMAILS: " + emailsUsuarios);

        try {
            enviarEmail(emailsUsuarios, assunto, mensagem);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void enviarEmailRecuperacaoCadastroUsuario(Usuarios usuario) {
        if (usuario == null) {
            return;
        }

        String assunto = "Solicitação de Dados Cadastrais FutibaManager";

        String mensagem = "Segue os dados do seu cadastro no site FutibaManager:";

        mensagem += "<br/><br/>Nome de Usuário: " + usuario.getLogin();
        mensagem += "<br/>Senha: " + usuario.getSenha();

        mensagem += "<br/><br/><b>Equipe FutibaManager</b>";

        try {
            enviarEmail(usuario.getEmail(), assunto, mensagem);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void enviarEmail(String email,
                             String assunto,
                             String mensagem) throws NamingException, MessagingException {

        MimeMessage message = new MimeMessage(emailSession);

        message.setSubject(assunto);
        message.setRecipients(RecipientType.TO, InternetAddress.parse(email, false));
        message.setDataHandler(new DataHandler(mensagem, HTML_MIME_TYPE));
        message.setFrom(new InternetAddress("\"Futiba Manager\" <futibamanager@gmail.com>"));
        message.saveChanges();

        Transport transport = emailSession.getTransport("smtp");

        String usuario = "futibamanager";
        String senha = "fut1bamanager";

        transport.connect(usuario, senha);
        
        transport.sendMessage(message, message.getAllRecipients());
    }
 
}